/**\
|**| DZDZÇ≈ÇÕÅAÉvÉçÉpÉeÉBÉäÉXÉgÇ XML ÉtÉ@ÉCÉãÇ…ï€ë∂
\**/
SInt32 SaveToXMLFile(
CFPropertyListRef pCFPRef,
CFStringRef pFilePathCFStrRef)
{
CFDataRef xmlCFDataRef;
CFURLRef myCFURLRef;
Boolean status;
SInt32 errorCode = noErr;
// ÉvÉçÉpÉeÉBÉäÉXÉgÇ XML ÉfÅ[É^Ç…ïœä∑
xmlCFDataRef = CFPropertyListCreateXMLData(
kCFAllocatorDefault, pCFPRef);
// DZÇÍÇ©ÇÁçÏê¨Ç∑ÇÈ XML ÉfÅ[É^ÇÃï€ë∂êÊÇÃÉtÉ@ÉCÉãÇ
// éwíËÇ∑ÇÈ URL ÇçÏê¨
myCFURLRef = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
pFilePathCFStrRef, // ÉtÉ@ÉCÉãÉpÉXñº
kCFURLHFSPathStyle,
false ); // ÉfÉBÉåÉNÉgÉäÇ©ÅH
// XML ÉfÅ[É^ÇÉtÉ@ÉCÉãÇ…èëÇ´çûÇfi
status = CFURLWriteDataAndPropertiesToResource (
myCFURLRef, // égópÇ∑ÇÈ URL
xmlCFDataRef, // èëÇ´çûÇfiÉfÅ[É^
NULL,
&errorCode);
// âï˙Ç∑ÇÈê”îCÇÃdžÇÈÇ∑Ç◊ǃÇà CF ÉIÉuÉWÉFÉNÉgÇâï˙
CFRelease(xmlCFDataRef);
CFRelease(myCFURLRef);
return errorCode;
}
/**\
|**| DZDZÇ≈ÇÕÅAXML ÉtÉ@ÉCÉãÇÉvÉçÉpÉeÉBÉäÉXÉgÇ÷ÉçÅ[Éh
\**/
CFPropertyListRef LoadFromXMLFile(
CFPropertyListRef pCFPRef,
CFStringRef pFilePathCFStrRef)
{
CFURLRef myCFURLRef;
CFDataRef xmlCFDataRef;
CFPropertyListRef myCFPropertyListRef = NULL;
SInt32 errorCode = noErr;
Boolean status;
// XML ÉfÅ[É^ÇÉçÅ[ÉhÇ∑ÇÈå≥ÇÃÉtÉ@ÉCÉãÇ
// éwíËÇ∑ÇÈ URL ÇçÏê¨
myCFURLRef = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
pFilePathCFStrRef, // ÉtÉ@ÉCÉãÉpÉXñº
kCFURLHFSPathStyle,
false ); // ÉfÉBÉåÉNÉgÉäÇ©ÅH
// XML ÉtÉ@ÉCÉãÇì«Ç›éÊÇÈ
status = CFURLCreateDataAndPropertiesFromResource(
kCFAllocatorDefault,
myCFURLRef,
&xmlCFDataRef, // ÉtÉ@ÉCÉãÉfÅ[É^ÇíuÇ≠èÍèä
NULL,
NULL,
&errorCode);
if (!status)
{
CFStringRef errorString;
// XML ÉfÅ[É^ÇégǡǃÉfÉBÉNÉVÉáÉiÉäÇçƒç\ê¨
myCFPropertyListRef = CFPropertyListCreateFromXMLData(
kCFAllocatorDefault,
xmlCFDataRef,
kCFPropertyListImmutable,
&errorString);
}
// âï˙Ç∑ÇÈê”îCÇÃdžÇÈÇ∑Ç◊ǃÇà CF ÉIÉuÉWÉFÉNÉgÇâï˙
CFRelease(myCFURLRef);
CFRelease(xmlCFDataRef);
return myCFPropertyListRef;
}
|